home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / irc_i_dodatki / kuang / kuangeleven28.lha / Rexx / Kinstall.amirx < prev    next >
Text File  |  1997-04-01  |  17KB  |  450 lines

  1. /* Kuang Eleven Installer v2.8 / Ariel Magnum*/
  2. delete=1;signal on syntax
  3. /* Init + Checklist*/
  4. /**/
  5. options results
  6. pr='KInstall';NL = '0a'x;div=x2c('01');receivedir='';soundir=''
  7. cecho(pr,bld(verstr()) 'Install Utility')
  8. "GETVERSION"
  9. ver=result
  10. if ~cver(ver,1.40) then do
  11.     cecho(pr,'Outdated AmIRC version' ver 'installed.')
  12.     cecho(pr,'You must have AmIRC 1.40 to use K¹¹ 2.8+.')
  13.     exit
  14. end
  15. if ~show('L','rexxsupport.library') then if ~addlib('rexxsupport.library',0,-30,0) then do
  16.     cecho(pr,bld('Fatal Error: Cannot load rexxsupport.library'))
  17.     exit
  18. end
  19. if ~exists('InstallData/Muirexx')|~exists('InstallData/Icon.mcc')|~exists('InstallData/Config')|~exists('InstallData/Friends')|~exists('InstallData/Images/buttons.gif')|~exists('InstallData/Reqtools.library')|~exists('InstallData/RexxReqtools.library') then do
  20.     cecho(pr,bld('Fatal Error: Missing Install files in InstallData directory!'))
  21.     cecho(pr,'Maybe you installed already and then InstallData directory would have been deleted?')
  22.     cecho(pr,'In that case decompress the archive again.')
  23.     exit
  24. end
  25. if ~exists('Rexx/Kuang11C.AMIRX')|~exists('Rexx/Kuang11CMD.AMIRX')|~exists('Rexx/Kuang11XDCC.AMIRX')|~exists('Rexx/Kuang11GUI.amirx')|~exists('Rexx/Kuang11.AMIRX') then do
  26.     cecho(pr,bld('Fatal Error: Missing program files!'))
  27.     exit
  28. end
  29. "INFO screen"
  30. screen='"'result'"'
  31. tags='rt_pubscrname='screen
  32. if ~exists('Default.AmIRCfg') then do
  33.     cecho(pr,bld('Cant find default AmIRC configuration!'))
  34.     exit
  35. end
  36. /**/
  37. /*Install files*/
  38. /**/
  39. cecho(pr,bld('Installing Executables'))
  40. cecho(pr,'Installing MUIRexx')
  41. mover('InstallData/Muirexx','SYS:Rexxc/MUIRexx')
  42. mover('InstallData/Icon.mcc','MUI:Libs/Mui/Icon.mcc')
  43. cecho(pr,'Installing ReqTools')
  44. mover('InstallData/Reqtools.library','LIBS:Reqtools.library')
  45. mover('InstallData/RexxReqTools.library','LIBS:RexxReqTools.library')
  46. mover('InstallData/Rexxdossupport.library','LIBS:Rexxdossupport.library')
  47. call remlib('rexxreqtools.library')
  48. address command 'AVAIL >NIL: FLUSH'
  49. if ~show('L','rexxreqtools.library') then if ~addlib('rexxreqtools.library',0,-30,0) then do
  50.     cecho(pr,bld('Fatal Error: Cannot load rexxreqtools.library'))
  51.     exit
  52. end
  53. if ~exists('Kuang11') then Makedir('Kuang11')
  54. if ~exists('Kuang11/Config') then rename('InstallData/Config','Kuang11/Config')
  55. if ~exists('Kuang11/Friends') then rename('InstallData/Friends','Kuang11/Friends')
  56. if ~exists('Kuang11/Images') then rename('InstallData/Images','Kuang11/Images')
  57. if ~exists('Kuang11/AwayReasons') then rename('InstallData/AwayReasons','Kuang11/AwayReasons')
  58. "GETCTCPSOUNDDIR"
  59. sndir=prsprg(result)
  60. cecho(pr,'Installing sounds to' sndir)
  61. insound('Away.WAV')
  62. insound('Back.WAV')
  63. insound('Ping.WAV')
  64. insound('Page.WAV')
  65. copy('Default.AmIRCfg','Default.AmIRCfg.bak')
  66. cecho(pr,'Backed up AmIRC default config')
  67. kver=getclip('st_version')
  68. kver=word(kver,3)
  69. parse var kver 'v' kver 'ß' .
  70. if cver(kver,2.5) then if rtezrequest("You are using K¹¹ version" kver"."||NL||"Would you like to do the short install?","Yes|No",pr,tags)=1 then do
  71.         if kver='2.5' then signal aliases26
  72.         signal cleanup
  73.     end
  74.     else kver=''
  75. /**/
  76. /*Aliases*/
  77. /**/
  78. cecho(pr,bld('Installing K¹¹ Aliases'))
  79. aliascmd('kx','%p')
  80. aliascmd('away','AWAY %p')
  81. aliascmd('back','AWAY')
  82. aliascmd('vote','VOTE %p')
  83. aliascmd('xdcc','XDCC %p')
  84. aliascmd('bk','KB %p')
  85. aliascmd('kb','KB %p')
  86. aliascmd('ikick','IKICK %p')
  87. aliascmd('chops','CHOPS %p')
  88. aliascmd('nops','NOPS %p')
  89. aliascmd('skick','SKICK %p')
  90. aliascmd('xdcc','XDCC %p')
  91. aliascmd('que','XDCC QUEUE')
  92. aliascmd('pban','PBAN %p')
  93. aliascmd('ig','KIGN %p')
  94. aliascmd('uig','KUNG %p')
  95. aliascmd('amsg','AMSG %p')
  96. aliascmd('ransk','RANSK %p')
  97. aliascfg('kc','%p')
  98. aliascfg('addk','ADDK %p')
  99. aliascfg('delk','DELK %p')
  100. aliascfg('listk','LISTK')
  101. aliascfg('load','LOAD %p')
  102. aliascfg('flist','LISTF %p')
  103. aliascfg('listf','LISTF %p')
  104. aliascfg('save','SAVE')
  105. aliascfg('savef','SAVEF')
  106. aliascfg('addf','ADDF %p')
  107. aliascfg('setf','SETF %p')
  108. aliascfg('delf','DELF %p')
  109. aliascfg('addh','ADDH %p')
  110. aliascfg('delh','DELH %p')
  111. aliascfg('renm','RENM %p')
  112. aliascfg('showu','SHOWU %p')
  113. aliascfg('check','CHECK %p')
  114. aliascfg('showc','SHOWC')
  115.  
  116. cecho(pr,bld('Installing Macros'))
  117. alias('page','/ctcp %p PAGE')
  118. alias('pc',"/rx '"||'options results;"GETCHANNEL";"SAY /PING" result'||"'")
  119. alias('cycle',"/rx '"||'options results;"GETCHANNEL";x=result;"SAY /LEAVE" x;"SAY /JOIN" x'||"'")
  120. alias('achan',"/rx '"||'options results;"CHANNELS";"SAY /MSG" translate(result,","," ") "%p"'||"'")
  121. alias('hiall',"/rx '"||'options results;"GETUSERS";x=%p translate(compress(result,"@+"),","," ");do until x=''|length(x)=1;p=min(length(x),150);parse var x y =p x;"SAY" y;end'||"'")
  122. alias('axdcc',"/rx '"||'options results;x="%p";parse var x n r;"SAY /CTCP" n "XDCC" r'||"'")
  123.  
  124. cecho(pr,bld('Installing support scripts'))
  125. cecho(pr,'Installing KickerKit by K."deluxe" Stenström Aliases')
  126. if exists('rexx/butt.amirx') then alias('butt','/rx butt.amirx %p')
  127. if exists('rexx/momma.amirx') then alias('momma','/rx momma.amirx %p')
  128. if exists('rexx/Philosophy.amirx') then alias('phil','/rx Philosophy.amirx %p')
  129. if exists('rexx/pinkybrain.amirx') then alias('pinky','/rx pinkybrain.amirx %p')
  130. if exists('rexx/rin.amirx') then alias('rin','/rx rin.amirx %p')
  131. if exists('rexx/splatt.amirx') then alias('splatt','/rx splatt.amirx %p')
  132.  
  133. cecho(pr,'Installing BillGates famous quotes alias')
  134. if exists('rexx/BillGates.AMIRX') then alias('bill','/rx billgates.amirx')
  135.  
  136. if exists('Rexx/Kuang11FLD.AMIRX') then do
  137.     cecho(pr,'Installing Kuang Force Alias')
  138.     aliasfld('kf','%p')
  139.     alias('nfdeop','/rx kuang11.amirx :MDEOP mdeop')
  140. end
  141. if exists('Rexx/CLone.AMIRX') then do
  142.     cecho(pr,'Installing KClone Alias')
  143.     alias('clone','/rx clone %p')
  144. end
  145. if exists('Kuang_Eleven.guide') then do
  146.     cecho(pr,'Installing KHELP Alias')
  147.     if exists('sys:utilities/multiview') then alias('khelp',"/rx '"||'address command "SYS:Utilities/MultiView Kuang_eleven.guide"'||"'")
  148.     else cecho(pr,bld('Error : Cant find SYS:Utilities MultiView'))
  149. end
  150.  
  151. if exists('Rexx/tracker.AMIRX') then do
  152.     cecho(pr,'Installing TCP Tracker Alias')
  153.     Select
  154.         when show('P','MIAMI.1') then cecho(pr,'TCP Tracker not compatible with Miami')
  155.         when ~exists('amitcp:bin/askhost') then cecho(pr,'TCP Tracker is missing AmiTCP:Bin/AskHost command')
  156.         when ~exists('amitcp:bin/sanamon') then cecho(pr,'TCP Tracker is missing AmiTCP:Bin/SanaMon command')
  157.     otherwise
  158.         l=showlist('D')
  159.         Select
  160.             when pos('ppp.device',l)~=0 then alias('track','/rx tracker ppp.device %p')
  161.             when pos('slip.device',l)~=0 then alias('track','/rx tracker slip.device %p')
  162.             when pos('aslip.device',l)~=0 then alias('track','/rx tracker aslip.device %p')
  163.             when pos('rhslip.device',l)~=0 then alias('track','/rx tracker rhslip.device %p')
  164.             when pos('rhcslip.device',l)~=0 then alias('track','/rx tracker rhcslip.device %p')
  165.         otherwise
  166.            cecho(pr,'I dont know what Net Device you are using!Cant Install /Track Alias!')
  167.         end
  168.     end
  169. end
  170. aliases26:
  171. cecho(pr,'Installing GUI Alias')
  172. alias('kgui',"/rx '"||'if show(P,KUANG) then do;address KUANG SHOW;exit;end;pragma(S,20000);address command "sys:rexxc/muirexx rexx/kuang11gui.amirx PORT KUANG HELP Kuang_Eleven.guide"'||"'")
  173.  
  174. x=statef('Default.AmIRCfg')
  175. parse var x . . . . x
  176. do forever
  177.     x1=rtezrequest("Done adding aliases." || NL ||"Now Select Save as defaults from the AmIRC Settings menu"||NL||"before closing this requester.","I Saved|Abort",pr,tags)
  178.     if x1=0 then do
  179.         cecho(pr,'No save no install')
  180.         exit
  181.     end
  182.     x1=statef('Default.AmIRCfg')
  183.     parse var x1 . . . . x1
  184.     if x~=x1 then leave
  185.     cecho(pr,bld('Dont lie to me I can see the date on that file hasnt changed!'))
  186. end
  187. if cver(kver,2.5) then do
  188.     cecho(pr,'Finished short install')
  189.     signal cleanup
  190. end
  191. /**/
  192. /*Modify Config*/
  193. /**/
  194. if exists('sys:utilities/multiview') then do
  195.     if version('sys:utilities/multiview')>=40.8 then str='PORTNAME MULTIKUANG';else str=''
  196.     address command 'run <>NIL: sys:utilities/multiview Kuang11/Images/Buttons.gif PUBSCREEN' screen str
  197. end
  198. else cecho(pr,'Missing SYS:Utilities/MultiView - I can not display preview of buttons.')
  199. instbut=rtezrequest("Would you like to install the 24 Special buttons"||NL||"for the AmIRC Userlist window?","Install|Dont",pr,tags)
  200. if show('P','MULTIKUANG') then address MULTIKUANG "QUIT"
  201.  
  202. cecho(pr,'This may take a few seconds...')
  203. open(1,'Default.AmIRCfg','R')
  204. open(2,'InstallData/Default.AmIRCfg','W')
  205. do until eof(1)
  206.     ln=readln(1)
  207.     id=upper(word(ln,1))
  208.     Select
  209.         when id='MSG_QUIT' then if pos('PHOENIX',upper(ln))~=0 then do
  210.             ln='MSG_QUIT' bld('Kuang Eleven Terminating')
  211.             cecho(pr,'Replaced lame phoenix Quit message')
  212.         end
  213.         when id='MSG_KICK' then if pos('PHOENIX',upper(ln))~=0 then do
  214.             ln='MSG_KICK' bld('Kuang Eleven')
  215.             cecho(pr,'Replaced lame phoenix kick message')
  216.         end
  217.         when id='AUTOAWAY_RESET' then ln='AUTOAWAY_RESET 0'
  218.         when id='EVENT_PRIV'|id='EVENT_INVITE'|id='EVENT_NOTICE'|id='EVENT_JOIN'|id='EVENT_PRIV'|id='EVENT_KICK'|id='EVENT_MODE' then ln=delstr(ln,lastpos(',',ln))',T:Kuang11.amirx %p'
  219.         when id='EVENT_CTCP' then ln=delstr(ln,lastpos(',',ln))',T:Kuang11.amirx ctcp%p'
  220.         when id='EVENT_DCC' then ln=delstr(ln,lastpos(',',ln))',T:Kuang11.amirx dcc%p'
  221.         when id='EVENT_HILITE' then ln=delstr(ln,lastpos(',',ln))',T:Kuang11.amirx hilite%p'
  222.         when instbut&left(id,6)='USEROP' then do
  223.             Select
  224.             when id='USEROP0' then ln='USEROP0 Query,/QUERY %u'
  225.             when id='USEROP1' then ln='USEROP1 Chat,/DCC CHAT %u'
  226.             when id='USEROP2' then ln='USEROP2 Ping,/PING %u'
  227.             when id='USEROP3' then ln='USEROP3 Send,/DCC SEND %u'
  228.             when id='USEROP4' then ln='USEROP4 Uinfo,/CTCP %u USERINFO'
  229.             when id='USEROP5' then ln='USEROP5 Version,/CTCP %u VERSION'
  230.             when id='USEROP6' then ln='USEROP6 Get XDCC,/ctcp %u xdcc list'
  231.             when id='USEROP7' then ln='USEROP7 Page,/ctcp %u PAGE'
  232.             when id='USEROP8' then ln='USEROP8 Kick,/KICK %u'
  233.             when id='USEROP9' then ln='USEROP9 Ban,/QKICK %u'
  234.             when id='USEROP10' then ln='USEROP10 Op,/OP %u'
  235.             when id='USEROP11' then ln='USEROP11 DeOp,/DEOP %u'
  236.             when id='USEROP12' then ln='USEROP12 PermBan,/Pban %u'
  237.             when id='USEROP13' then ln='USEROP13 KGui,/KGUI'
  238.             when id='USEROP14' then ln='USEROP14 KHelp,/KHELP'
  239.             when id='USEROP15' then ln='USEROP15 XDCC PList,/XDCC PLIST'
  240.             when id='USEROP16' then ln='USEROP16 XDCC SList,/XDCC SList'
  241.             when id='USEROP17' then ln='USEROP17 XDCC Noti,/XDCC NOTI'
  242.             when id='USEROP18' then ln='USEROP18 XDCC List,/XDCC LIST'
  243.             when id='USEROP19' then ln='USEROP19 XDCC Add,/XDCC ADDP'
  244.             when id='USEROP20' then ln='USEROP20 Add Friends,/Addf %u all'
  245.             when id='USEROP21' then ln='USEROP21 Add Host,/addh %u'
  246.             when id='USEROP22' then ln='USEROP22 Away/Back,/Away'
  247.             when id='USEROP23' then ln='USEROP23 Ping Channel,/pc'
  248.             otherwise
  249.             end
  250.         end
  251.     otherwise
  252.     end
  253.     writeln(2,ln)
  254. end
  255. close(1);close(2)
  256. delete('Default.AmIRCfg')
  257. rename('InstallData/Default.AmIRCfg','Default.AmIRCfg')
  258. call rtezrequest("A new AmIRC configuration file has been created."|| NL ||"Select Load Settings from Default on the AmIRC settings menu"||NL||"before closing this requester.","I have",pr,tags)
  259. /**/
  260. /*Install Presets*/
  261. /**/
  262.  
  263. if rtezrequest("Would you like to install the SoundLeech plugins?"||NL||"-PING plugin to play PING.WAV."||NL||"-SOUND plugin to request sounds you dont have."||NL||"-GETSOUND plugin to send sounds on CTCP request."||NL||"Any of those may be easily deactivated via the GUI!"||NL||"This will overwrite your current Plugins config!","Yes|NO WAY!",pr,tags)=1 then do
  264.     cmd='';scr=''
  265.     if exists('rexx/ctcp/ping.amirx') then do
  266.         cmd='PING'
  267.         scr='ping.amirx'
  268.     end
  269.     else cecho(pr,'Missing ping.amirx')
  270.     if exists('rexx/ctcp/getsound.amirx') then do
  271.         cmd=cmd 'GETSOUND'
  272.         scr=scr 'getsound.amirx'
  273.     end
  274.     else cecho(pr,'Missing getsound.amirx')
  275.     if exists('rexx/ctcp/autogetsounds.amirx') then do
  276.         cmd=cmd 'SOUND'
  277.         scr=scr 'autogetsounds.amirx'
  278.     end
  279.     else cecho(pr,'Missing autogetsounds.amirx')
  280.     cmd=strip(cmd)
  281.     scr=strip(scr)
  282.     if cmd~=''&scr~='' then do
  283.         open(1,'Kuang11/Config','A')
  284.         writeln(1,'extrctcp' cmd)
  285.         writeln(1,'extrscr' scr)
  286.         close(1)
  287.         cecho(pr,'Installed' cmd 'CTCP plugins.')
  288.     end
  289.     else cecho(pr,'Installation of plugins failed!')
  290. end
  291.  
  292. x=getclip('sc_pubcmd')
  293. if x~='' then if rtezrequest("Would you like to install the Modes and RemoteSysop public channel commands?"||NL||"This is highly reccomended for maintaining compatibility with a K¹¹ 2.1 Setup."||NL||"This will overwrite your current Channel Commands config!","Yes|NO WAY!",pr,tags)=1 then x=''
  294. if x='' then do
  295.     open(1,'Kuang11/Config','A')
  296.     writeln(1,'pubcmd VOICE UNVOICE OP ADDF ADDH SETF SAVE')
  297.     writeln(1,'pubscr modes modes modes remotesys remotesys remotesys remotesys')
  298.     close(1)
  299.     cecho(pr,'Installed Public commands : Modes and RemoteSysop')
  300. end
  301.  
  302. if exists('env:TIADCC') then do
  303.     cecho(pr,'You are using TIA TCP/IP Emulator.When K¹¹ is initialised the required ENV variable TIADCC will be set with the correct host name.')
  304.     open(1,'Kuang11/Config','A')
  305.     writeln(1,'tia ON')
  306.     close(1)
  307. end
  308.  
  309. if word(statef('Kuang11/Friends'),2)='124' then if rtezrequest("You seem to have the default friends list" || NL || "with the authors entries." || NL || "Would you like to keep it?","Keep it|Delete it",pr,tags)=0 then do
  310.     delete('Kuang11/Friends')
  311.     cecho(pr,'You are now friend-less')
  312. end
  313. if exists('Kuang_Eleven') then do
  314.     delete('Kuang_Eleven')
  315.     if exists('Kuang ELeven.info') then delete('Kuang ELeven.info')
  316.     cecho(pr,bld('I have removed the Kuang_Eleven icon.Kuang no longer requires to be started with it.Start AmIRC normally'))
  317. end
  318. else cecho(pr,bld('Unable to removed the Kuang_Eleven icon.Kuang no longer requires to be started with it.Start AmIRC normally'))
  319.  
  320. if exists('Rexx/kuang11pub.amirx') then do
  321.     delete('Rexx/kuang11pub.amirx')
  322.     cecho(pr,bld('I have removed rexx/kuang11pub.amirx which is no longer required'))
  323. end
  324. else cecho(pr,bld('Unable to removed rexx/kuang11pub.amirx which is no longer required'))
  325.  
  326. /**/
  327. /*Cleanup*/
  328. /**/
  329. Cleanup:
  330. if delete=1 then do
  331.     address command 'delete InstallData ALL QUIET'
  332.     delete('InstallData')
  333. end
  334. cecho(pr,'Deleted install files')
  335. /**/
  336. /*Finish*/
  337. /**/
  338. cecho(pr,bld('Checking K¹¹ config'))
  339. 'SAY /load'
  340. do 5 until getclip('st_init')==1
  341.     delay(200)
  342. end
  343. x=getclip('sc_sensordcc')
  344. if x='' then x=0
  345. if x<5 then do
  346.     setclip('sc_sensordcc',5)
  347.     cecho(pr,'Your DCC flood sensor was incorectly set at' x'. I have set it to 5.')
  348.     save=1
  349. end
  350. x=getclip('sc_sensorctcp')
  351. if x>3 then if rtezrequest("AmIRC's internal flood protection sensor is set at 4 hits."||NL||"Inorder for K¹¹ to intercept floods before AmIRC,"||NL||" I will now set CTCP sensor to 3.","Great do it|Dont do it",pr,tags)=1 then do
  352.     setclip('sc_sensorctcp',3)
  353.     cecho(pr,'Your CTCP flood sensor was incorectly set at' x'. I have set it to 3.')
  354.     save=1
  355. end
  356. x=getclip('sc_rvg')
  357. if x='ON'|x='NONP' then
  358.     if getclip('sc_rvgd')~='ON'&getclip('sc_rvgb')~='ON'&getclip('sc_rvgk')~='ON' then do
  359.         setclip('sc_rvgk','ON')
  360.         cecho(pr,'Activated Revenge Kicking')
  361.         save=1
  362.     end
  363. if getclip('sc_saveban')='' then do
  364.     cecho(pr,'Activating SaveBan')
  365.     setclip('sc_saveban','ON')
  366. end
  367.  
  368. if save=1 then 'SAY /SAVE'
  369. c=chans()
  370. str='has just installed' verstr()'!'
  371. if words(c)~==0 then do i=1 to words(c)
  372.     me(word(c,i),str)
  373. end
  374. cecho(pr,'Config validated.Enjoy using K¹¹')
  375. cecho(pr,bld('Installation Complete'))
  376. 'say /khelp'
  377. exit
  378. /**/
  379. /* #### Shared #### */
  380. /**/
  381. verstr:;return 'Kuang Eleven v2.8'
  382. bld:;bld = x2c('02');return bld||arg(1)||bld
  383. me:;'raw PRIVMSG' arg(1) ':'||div||'ACTION' arg(2)||div;retuwwrn 0
  384. chans:;"CHANNELS";return result
  385. cecho:;"ECHO P="d2c(27)"b«"arg(1)"»" arg(2)'.';return 0
  386. aliascmd:;'SAY /ALIAS' arg(1) '= /RX Kuang11CMD.AMIRX' arg(2);return 0
  387. aliasfld:;'SAY /ALIAS' arg(1) '= /RX Kuang11FLD.AMIRX' arg(2);return 0
  388. aliascfg:;'SAY /ALIAS' arg(1) '= /RX Kuang11C.AMIRX' arg(2);return 0
  389. alias:;'SAY /ALIAS' arg(1) '=' arg(2);return 0
  390. amrx:;'SAY /RX' arg(1);return 0
  391. syntax:
  392. "ECHO" "P=Syntax" "Command on line" SIGL "returned" RC ":" errortext(rc) sourceline(SIGL)
  393. exit
  394.  
  395. cver: PROCEDURE
  396. ver=arg(1)
  397. parse var ver version '.' revision .
  398. sver=arg(2)
  399. parse var sver sversion '.' srevision .
  400. if version<sversion|revision<srevision then return 0
  401. return 1
  402.  
  403. version: PROCEDURE
  404. address command 'Version FILE >T:verout.tmp' arg(1)
  405. open(1,'t:Verout.tmp','R')
  406. x=readln(1)
  407. close(1)
  408. parse var x . x .
  409. return x
  410.  
  411. mover: PROCEDURE EXPOSE pr
  412. file=arg(1)
  413. dest=arg(2)
  414. if exists(dest) then do
  415.     verdest=version(dest)
  416.     verfile=version(file)
  417.     if ~cver(verdest,verfile) then do
  418.         copy(file,dest)
  419.         cecho(pr,'Updated' dest 'Version' verfile 'Over' verdest)
  420.     end
  421.     else cecho(pr,'Skipped' dest)
  422. end
  423. else do
  424.     copy(file,dest)
  425.     cecho(pr,'Installed' dest)
  426. end
  427. return 0
  428.  
  429. copy:
  430. address command 'Copy' arg(1) arg(2) 'QUIET'
  431. return 0
  432.  
  433. prsprg:PROCEDURE
  434. y=pragma('d')
  435. z=right(y,1)
  436. if z~='/'&z~=':' then y=y||'/'
  437. x=arg(1)
  438. if upper(left(x,8))='PROGDIR:' then if length(x)>8 then return y||substr(x,9);else return y
  439. return x
  440.  
  441. insound:
  442. snd=arg(1)
  443. if ~exists(sndir||snd) then do
  444.     copy('Installdata/'snd,sndir)
  445.     cecho(pr,'Installed' snd)
  446. end
  447. else cecho(pr,'Skipped' snd)
  448. return 0
  449. /**/
  450.